package com.ruoyi.share.service.impl;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.ruoyi.share.domain.ShareGoods;
import com.ruoyi.share.domain.ShareGoodsRemarks;
import com.ruoyi.share.domain.ShareGoodsRemarksFixed;
import com.ruoyi.share.mapper.ShareGoodsMapper;
import com.ruoyi.share.mapper.ShareGoodsRemarksFixedMapper;
import com.ruoyi.share.mapper.ShareGoodsRemarksMapper;
import com.ruoyi.share.service.IShareGoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 商品信息Service业务层处理
 *
 * @author ruoyi
 * @date 2021-11-16
 */
@Service
public class ShareGoodsServiceImpl implements IShareGoodsService
{
    @Autowired
    private ShareGoodsMapper shareGoodsMapper;

    @Autowired
    private ShareGoodsRemarksMapper shareGoodsRemarksMapper;
    @Autowired
    private ShareGoodsRemarksFixedMapper shareGoodsRemarksFixedMapper;
    /**
     * 查询商品信息
     *
     * @param goodsId 商品信息主键
     * @return 商品信息
     */
    @Override
    public ShareGoods selectShareGoodsByGoodsId(Long goodsId)
    {
        ShareGoods shareGoods= shareGoodsMapper.selectShareGoodsByGoodsId(goodsId);
        //查询商品备注
        List<ShareGoodsRemarks> shareGoodsRemarks = shareGoodsRemarksMapper.selectShareGoodsRemarksListByGoodsId(shareGoods.getGoodsId());
        for (ShareGoodsRemarks shareGoodsRemarks1:shareGoodsRemarks){
            if(shareGoodsRemarks1.getRemarksType()==1){
                shareGoodsRemarks1.setShareGoodsRemarksFixedList(shareGoodsRemarksFixedMapper.selectShareGoodsRemarksFixedListByRemarksId(shareGoodsRemarks1.getId()));
            }
        }
        shareGoods.setShareGoodsRemarksList(shareGoodsRemarks);

        return shareGoods;
    }

    /**
     * 查询商品信息列表
     *
     * @param shareGoods 商品信息
     * @return 商品信息
     */
    @Override
    public List<ShareGoods> selectShareGoodsList(ShareGoods shareGoods)
    {
        return shareGoodsMapper.selectShareGoodsList(shareGoods);
    }

    /**
     * 分页查询
     * @param shareGoods 商品信息
     * @param pageNum 查询页码
     * @param pageSize 查询条数
     * @return
     */
    @Override
    public Page<ShareGoods> selectShareGoodsListPage(ShareGoods shareGoods, Integer pageNum, Integer pageSize) {
        //创建Page对象
        Page<ShareGoods> page;
        //启动分页
        PageHelper.startPage(pageNum, pageSize);
        //查询
        page = (Page<ShareGoods>) shareGoodsMapper.selectShareGoodsList(shareGoods);
        return page;
    }

    /**
     * 新增商品信息
     *
     * @param shareGoods 商品信息
     * @return 结果
     */
    @Override
    public int insertShareGoods(ShareGoods shareGoods)
    {
        try{
            System.err.println(shareGoods.getShareGoodsRemarksList().toString()+"11111111111111111111111111");
            //增加商品数据
            shareGoods.setCreateDate(new Date());
            shareGoodsMapper.insertShareGoods(shareGoods);

            if(shareGoods.getShareGoodsRemarksList().size()!=0 && shareGoods.getShareGoodsRemarksList()!=null){
                //增加商品备注
                for (ShareGoodsRemarks remarks:shareGoods.getShareGoodsRemarksList()){
                    //为商品备注添加商品id
                    remarks.setGoodsId(shareGoods.getGoodsId());
                    int remarksRes = shareGoodsRemarksMapper.insertShareGoodsRemarks(remarks);
                    //判断是否为固定备注 如果RemarksType=1则为固定备注需添加固定值
                    if (remarksRes!=0 && remarks.getRemarksType()==1 &&remarks.getShareGoodsRemarksFixedList()!=null){
                        for(ShareGoodsRemarksFixed remarksFixed:remarks.getShareGoodsRemarksFixedList()){
                            //为固定备注固定值添加商品备注id
                            remarksFixed.setRemarksId(remarks.getId());
                            int remarksFixedRes = shareGoodsRemarksFixedMapper.insertShareGoodsRemarksFixed(remarksFixed);
                        }
                    }
                }
            }
        }catch (Exception e){
            return 0;
        }
        return 1;
    }

    /**
     * 修改商品信息
     *
     * @param shareGoods 商品信息
     * @return 结果
     */
    @Override
    public int updateShareGoods(ShareGoods shareGoods)
    {
        try {
            //修改商品数据
            //判断是否为自定义金额 如果为自定义金额则把金额改为0.00
            if (shareGoods.getTheAmountSet()==1){
                    BigDecimal bigDecimal=new BigDecimal("0.00");
                shareGoods.setTotalMoney(bigDecimal);
            }
            shareGoods.setUpdateDate(new Date());
            shareGoodsMapper.updateShareGoods(shareGoods);
            //查询商品备注
            List<ShareGoodsRemarks> shareGoodsRemarksList = shareGoodsRemarksMapper.selectShareGoodsRemarksListByGoodsId(shareGoods.getGoodsId());
            //循环删除商品备注
            for (ShareGoodsRemarks shareGoodsRemarks:shareGoodsRemarksList){
                shareGoodsRemarksMapper.deleteShareGoodsRemarksById(shareGoodsRemarks.getId());
                if (shareGoodsRemarks.getRemarksType()==1){
                    //查询固定备注选项
                    List<ShareGoodsRemarksFixed> shareGoodsRemarksFixedsList = shareGoodsRemarksFixedMapper.selectShareGoodsRemarksFixedListByRemarksId(shareGoodsRemarks.getId());
                    //循环删除固定备注选项
                    for (ShareGoodsRemarksFixed shareGoodsRemarksFixed : shareGoodsRemarksFixedsList){
                        shareGoodsRemarksFixedMapper.deleteShareGoodsRemarksFixedById(shareGoodsRemarksFixed.getId());
                    }
                }
            }

            //增加备注信息
            if(shareGoods.getShareGoodsRemarksList().size()!=0 && shareGoods.getShareGoodsRemarksList()!=null){
                //增加商品备注
                for (ShareGoodsRemarks remarks:shareGoods.getShareGoodsRemarksList()){
                    //为商品备注添加商品id
                    remarks.setGoodsId(shareGoods.getGoodsId());
                    int remarksRes = shareGoodsRemarksMapper.insertShareGoodsRemarks(remarks);
                    //判断是否为固定备注 如果RemarksType=1则为固定备注需添加固定值
                    if (remarksRes!=0 && remarks.getRemarksType()==1 &&remarks.getShareGoodsRemarksFixedList()!=null){
                        for(ShareGoodsRemarksFixed remarksFixed:remarks.getShareGoodsRemarksFixedList()){
                            //为固定备注固定值添加商品备注id
                            remarksFixed.setRemarksId(remarks.getId());
                            int remarksFixedRes = shareGoodsRemarksFixedMapper.insertShareGoodsRemarksFixed(remarksFixed);
                        }
                    }
                }
            }
        }catch (Exception e){
            return 0;
        }
        return 1;
    }

    /**
     * 批量删除商品信息
     *
     * @param goodsIds 需要删除的商品信息主键
     * @return 结果
     */
    @Override
    public int deleteShareGoodsByGoodsIds(Long[] goodsIds)
    {
        try{
            for (Long goodsid:goodsIds){
                List<ShareGoodsRemarks> shareGoodsRemarksList = shareGoodsRemarksMapper.selectShareGoodsRemarksListByGoodsId(goodsid);
                for(ShareGoodsRemarks shareGoodsRemarks:shareGoodsRemarksList){
                    if (shareGoodsRemarks.getRemarksType()==1){
                        shareGoodsRemarksFixedMapper.deleteShareGoodsRemarksFixedByRemarksIds(shareGoodsRemarks.getId());
                    }
                    shareGoodsRemarksMapper.deleteShareGoodsRemarksById(shareGoodsRemarks.getId());
                }
            }
            return shareGoodsMapper.deleteShareGoodsByGoodsIds(goodsIds);
        }catch (Exception e){
            return 0;
        }
    }

    /**
     * 删除商品信息信息
     *
     * @param goodsId 商品信息主键
     * @return 结果
     */
    @Override
    public int deleteShareGoodsByGoodsId(Long goodsId)
    {
        return shareGoodsMapper.deleteShareGoodsByGoodsId(goodsId);
    }

    /**
     * 修改上架状态
     * @param putawayStatus 状态 0下架 1 上架
     * @param goodsId 商品id
     * @return
     */
    @Override
    public int updateShareGoodsPutawayStatusByGoodsId(Long putawayStatus, Long goodsId) {
        if (putawayStatus!=null && !putawayStatus.equals("") && goodsId!=null && !goodsId.equals("")){
            return shareGoodsMapper.UpdateSharePutawayStatusByGoodsId(putawayStatus,goodsId);
        }
        return 0;
    }
}
